package states;

import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import management.DBAccess;
import management.ZoneBuilder;
import management.ObjectDispatcher;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;
import physics.BlockMap;

public class LoadingState extends BasicGameState {

    DBAccess dba = new DBAccess();
    public static final int ID = 1;
    // Contenidor del joc
    private GameContainer gc;
    private StateBasedGame state;
    // Imatge fons de pantalla
    private Image imatgeFons;

    /**
     * BasicGameState ens obliga a implementar aquest metode
     * @return int amb l'ID de l'estat del joc
     */
    public int getID() {
        return ID;
    }

    /**
     * Aqui s'inicialitzen les variables necessaries per al correcte funcionament del estat
     * @param container
     * @param game
     * @throws SlickException
     */
    public void init(GameContainer gc, StateBasedGame sbg)
            throws SlickException {

        ObjectDispatcher lef = new ObjectDispatcher();
        ZoneBuilder zb = new ZoneBuilder();
        try {
            lef.crearHashMapPnjs();
            zb.buildZone(1);
        } catch (SQLException ex) {
            Logger.getLogger(LoadingState.class.getName()).log(Level.SEVERE, null, ex);
        }
        BlockMap map = new BlockMap(dba.getMapPath(1));


        this.gc = gc;
        this.state = sbg;
        imatgeFons = dba.recuperarMenuResource("fonsMenu");

    }

    /**
     * El motor s'encarrega de cridar aquest metode, aqui s'actualitzaran dades de variables o objectes
     * que s'estiguin usant en aquest estat
     * @param container
     * @param game
     * @param delta
     * @throws SlickException
     */
    public void update(GameContainer container, StateBasedGame game, int delta)
            throws SlickException {
    }

    /**
     * Aquest metode s'usa per renderitzar o dibuixar en pantalla els elements que es vulguin
     * @param container
     * @param game
     * @param g
     * @throws SlickException
     */
    public void render(GameContainer container, StateBasedGame game, Graphics g)
            throws SlickException {
        imatgeFons.draw(0, 0);
    }

    /**
     * Es fa un override del metode enter, el qual es crida cada vegada que s'entra a l'estat
     * @param gc : context on es situa l'estat actual
     * @param state : estat actual
     */
    @Override
    public void enter(GameContainer gc, StateBasedGame state) {
        state.enterState(GamePlayState.ID);

    }
}